import wave
import analisadorWave
import math

# carrega vetores e medias
ana1 = analisadorWave.AnalisadorWave(wave.open('audio/rec1.wav'))
ana2 = analisadorWave.AnalisadorWave(wave.open('audio/rec3.wav'))
ana1.analisar()
ana2.analisar()

# Encontra numero maximo de defasamento de amostras
Dm = 30
Vs = 340.29 * 100
rate = ana1.rate
Mmax = int(Dm/Vs*rate)+1


def xcorr(vetor1,vetor2,media1,media2,Mmax):
	if len(vetor1) > len(vetor2):
		N = len(vetor2)
	else:
		N = len(vetor1)
	if N > Mmax*10:
		N = Mmax*10
	print N
	idmax1 = 0
	idmax2 = 0
	vetCorr1 = []
	vetCorr2 = []
	print 'Numero d iteracoes: %s' % Mmax
	for i in range(Mmax):
		print 'iteracao: %s' % (i+1)
		vetCorr1.append(r(vetor1,vetor2,media1,media2,i,N))
		vetCorr2.append(r(vetor2,vetor1,media2,media1,i,N))
		if vetCorr1[i] > vetCorr1[idmax1]:
			idmax1 = i
		if vetCorr2[i] > vetCorr2[idmax2]:
			idmax2 = i
	print idmax1,idmax2
	if vetCorr1[idmax1] > vetCorr2[idmax2]:
		itdA = idmax1
		print 'correlacao maxima: %s' % vetCorr1[idmax1]
	else:
		itdA = -idmax2
		print 'correlacao maxima: %s' % vetCorr2[idmax2]
	print itdA
	print float(itdA)/rate
			
		
def r(vetor1,vetor2,media1,media2,d,N):
	cima = 0
	norma1 = 0
	norma2 = 0
	for i in range(N-d):
		cima = cima + (vetor1[i]-media1) * (vetor2[i+d]-media2)
		norma1 = norma1 + (vetor1[i]-media1)**2
		norma2 = norma2 + (vetor2[i+d]-media2)**2
	return cima/(math.sqrt(norma1*norma2))
	
xcorr(ana1.amostras,ana2.amostras,ana1.media,ana2.media,Mmax)
print ana2.segundoMaiorAmostra() - ana1.segundoMaiorAmostra()
